本节我们将在W5500上面实现一个HTTP Client程序去连接网络服务器Yeelink平台。野火开发板预留有温湿度传感器DHT11的接口,因此我们将通过W5500将采集到温度和湿度信息上传Yeelink平台� 并且在Yeelink平台实时观察温湿度变化情况。Yeelink是一个免费的云平台,旨在利用无线网络、开源硬件和软件,智能手机和App共同打造一个家庭智能中心打开。打开Yeelink平台服务器网页,点击“快速开始”,我们可以注册一个账号, 登陆后,可以添加自己的设备和传感器。它将复杂的传感器以极简的方式组到同一个网络内,可满足智能家居的各种需求。通过Yeelink提供的数据接口,用户可以把自己的传感器通过互联网接入Yeelink云平台,从而实现随时随地获取传感器数据� 为一些智能家居设备接入互联网提供了云平台支持。具体的设备添加过程,Yeelink平台有详细的介绍,在此就不多解释。在申请账号时要注意生成的API KEY,添加设备时会生成一个URL请求,里面提供了设备ID device/xxxx,传感器ID sensor/xxxx� 这几个信息与程序开头建立的请求报文中信息是一一对应的,因此应该把程序中这些信息修改为我们自己申请账号和添加设备是得到的信息。同大多数开源平台一样,Yeelink提供的API也是基于HTTP协议提交和接收数据。有关于API文档的详细介绍请参考Yeelink网站� 接下来简单分析一下程序,main.c主文件实现W5500上传数据的主流程,bsp_dht11.c文件实现对温湿度数据的采集,http_client文件实现W5500与服务器的的连接以及数据上传。初始化函数没有具体的变化,在此就不多讲解。为了使程序能方便地组建Yeelink所要求 的JSON数据格式,我们把采集到数据直接替代这个字符串中的xx即可。device/ID/sensor/ID 这两处ID 已经在Yeelink网站上注册得到,一个是设备ID,一个是设备上的传感器的ID,同时,一个设备可以有若干个传感器。U-ApiKey则是你的身份识别码,只有正确提交 U-ApiKey才可以在Yeelink上面更新数据。Content-Length:后面�12,指的就� {"value":xx} 的长度,更具体的格式可以翻阅Yeelink的API文档。需要注意的是,在C语言中,双引� “”需要使用转义字符�
HTTP Client实现原理图如下:while(1) { switch(getSn_SR(ch)) { case SOCK_INIT: connect(ch, yeelink_server_ip ,yeelink_server_port); break; case SOCK_ESTABLISHED: if(getSn_IR(ch) & Sn_IR_CON) { setSn_IR(ch, Sn_IR_CON); } if( DHT11_GetValue(temp_rh)) { memcpy(Buffer,post[i],strlen(post[i])); Buffer[231]=temp_rh[i]/10+0x30; Buffer[232]=temp_rh[i]%10+0x30; send(ch,(const uint8 *)Buffer,sizeof(Buffer)); i=!i; printf("RH:%d, Temp:%d\r\n", temp_rh[0], temp_rh[1]); } Delay_ms(500); close(ch); break; case SOCK_CLOSE_WAIT: break; case SOCK_CLOSED: printf("Send to Yeelink:OK\r\n"); socket(ch, Sn_MR_TCP,anyport++ , 0x00); break; default: break; } }HTTP Client的测试步骤如�